欧美一区2区三区4区公司二百,国产精品婷婷午夜在线观看,自拍偷拍亚洲精品,国产美女诱惑一区二区

HashMap 添加源碼分析

HashMap

?

碼源解析

?

添加源碼解析

?

resize()

?

這個方法在putval中執行,因為要確保你數組不是null

?

resize就是重新計算容量;向HashMap對象里不停的添加元素,而HashMap對象內部的數組無法裝載更多的元素時,對象就需要擴大數組的長度,以便能裝入更多的元素;當然java里的數組是無法自動擴容的,方法是使用一個新的數組代替已有的容量小的數組;就像我們用一個小桶裝

putVal()
首次添加

final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
? ? ? ? ? ? ? ? ? ?boolean evict) {
? ? ? ? Node<K,V>[] tab; Node<K,V> p; int n, i;
? ? ? ? if ((tab = table) == null || (n = tab.length) == 0)
? ? ? ? ? ? n = (tab = resize()).length;
? ? ? ? if ((p = tab[i = (n - 1) & hash]) == null)
? ? ? ? ? ? tab[i] = newNode(hash, key, value, null);
? ? ? ??
? ??
? ? ~~~~~
? ??
? ? ? ? ++modCount;
? ? ? ? if (++size > threshold)
? ? ? ? ? ? resize();
? ? ? ? afterNodeInsertion(evict);
? ? ? ? return null;
? ? }

if ((p = tab[i = (n - 1) & hash) == null)

初始化完成后,他會去根據數組長度-1與計算的hash碼進行與運算的出來放的數組位置,他會去看這個位置有沒有元素

有呢就創建一個Node放到這個位置就可以了

如果不是null那就只能鏈表操作了,那個操作等會說

if (++size > threshold)
? ? ? ?resize();
afterNodeInsertion(evict);
return null;

之后呢,我們要變更size的大小,因為size是記錄有多少個真正的元素在這個數組中,threshold就是臨界值,我們初始化好了,這個值就是12,這個if呢就是為了判斷,你添加到數組的元素,你不能大于這個臨界值,那你要是大于了,那我就去擴容去了,否則了那就沒事了

afterNodeInsertion(evict);

afterNodeInsertion(evict);

這玩意是為了LinkedHashMap服務的,是為了保證順序而存在的,在hashmap中沒意義。

文章鏈接: http://m.qzkangyuan.com/13042.html

文章標題:HashMap 添加源碼分析

文章版權:夢飛科技所發布的內容,部分為原創文章,轉載請注明來源,網絡轉載文章如有侵權請聯系我們!

聲明:本站所有文章,如無特殊說明或標注,均為本站原創發布。任何個人或組織,在未征得本站同意時,禁止復制、盜用、采集、發布本站內容到任何網站、書籍等各類媒體平臺。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。

給TA打賞
共{{data.count}}人
人已打賞
建站教程投稿分享

Pyhon程序控制流程

2022-11-23 13:58:53

建站教程投稿分享

并發修改異常簡介

2022-11-23 14:08:50

0 條回復 A文章作者 M管理員
    暫無討論,說說你的看法吧
?
個人中心
購物車
優惠劵
今日簽到
有新私信 私信列表
搜索
主站蜘蛛池模板: 南宁市| 潼南县| 通辽市| 合山市| 尼木县| 普兰店市| 峨山| 屯留县| 西宁市| 陕西省| 新丰县| 乐清市| 曲沃县| 保定市| 渭南市| 绥江县| 新绛县| 雷州市| 资源县| 西城区| 怀远县| 兴义市| 印江| 密山市| 枣强县| 天门市| 株洲市| 酒泉市| 瑞丽市| 吴忠市| 榆中县| 裕民县| 湖北省| 鄢陵县| 阿荣旗| 吴川市| 绍兴县| 贵阳市| 亳州市| 伊吾县| 仪征市|